package com.my.java.mq.rabbitmq;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

import com.rabbitmq.client.AMQP;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

/** 
* @author  作者 ucs_fuqing
* @date 创建时间：2017年8月11日 下午2:21:27 
* @version 1.0 
* @parameter  
* @since  
* @return  
*/
public abstract class PointToPoint {
    protected Channel channel;
    protected Connection connection;
    protected String pointName;
    
    /**
     * 获取一个队列的连接
     * @param pointName
     * @throws IOException
 * @throws TimeoutException 
     */
    public PointToPoint(String pointName) throws IOException, TimeoutException{
        this.pointName = pointName;
        
        //创建连接工厂
        ConnectionFactory cf = new ConnectionFactory();
        
        //设置rabbitmq服务器地址
        cf.setHost("112.74.33.249");
        
        //设置rabbitmq服务器用户名
        cf.setUsername("test");
        
        //设置rabbitmq服务器密码
        cf.setPassword("test");
        
        cf.setPort(AMQP.PROTOCOL.PORT); 
        //获取一个新的连接
        connection = cf.newConnection();

    }
    
    
    protected Channel getChannel(String channelName) throws IOException{
        //创建一个通道
        channel = connection.createChannel();
        //申明一个队列，如果这个队列不存在，将会被创建
        channel.queueDeclare(channelName, false, false, false, null);
        return channel;
    }
    
    /**
 * @throws TimeoutException 
     * 
    * @Title: close 
    * @Description: 其实在程序完成时一般会自动关闭连接，但是这里提供手动操作的入口， 
    * @param @throws IOException    设定文件 
    * @return void    返回类型 
    * @throws
     */
    public void close() throws IOException, TimeoutException{
        this.channel.close();
        this.connection.close();
    }
}